#include "Shm.hpp"
#include "Fifo.hpp"


int main()
{
    // Shm shm;
    // //创建共享内存
    // shm.Create();
    // sleep(5);

    // //关联共享内存
    // shm.Attach();
    // shm.VirtualAddr();      //打印起始地址

    // sleep(5); 
    // shm.Destroy();

// ------------- 代码优化前后分割线 ---------------
    Shm shm(pathname,projid,CREATER);    //创建之后传参数

    NamedFifo fifo(PATH,FILENAME);    //这里要写成 PATH   之前是为了验证开启失败所以运用了 /  
    //文件操作
    FileOper readerfile(PATH,FILENAME);     //打开管道
    readerfile.OpenForRead();    //读的方式打开

    //若想要进行通信 ---- 只需要shm.VirtualAddr  直到shm.size
    // shm.VirtualAddr();
    // shm.size();

//假设共享内存是一个大的字符串   VirtualAddr  返回值类型是void*  强转成为char*
    char *mem = (char*)shm.VirtualAddr();   
    while(true)
    {
        //等待成功了  返回值为true才会进行访问共享内存
        if(readerfile.Wait())    //默认服务端就会阻塞    server端代码改为等待   默认会阻塞
        {
            printf("%s\n",mem);
        }
        else  
            break;
    }
    
    readerfile.Close();     //管道读的关闭放在最后
    std::cout<<"server end normal!"<<std::endl;    //server端的析构函数没有被成功调用
    return 0;
}